#pragma once
#include <string>

namespace krryn{
namespace core{
    class state_stack;
	class state{
	public:
		explicit state(const std::string &a_Name);
		virtual ~state() {};

		virtual void tick(float a_DeltaTime) = 0;

		void start();
		void stop();

	protected:
		virtual void init() {}
		virtual void activate() {}
		virtual void deactivate() {}

		state_stack &m_States;
	private:
		bool m_IsInit;
	};
}
}
